Comments 43
ну как пишут в интернетах тот же StartSSL не подходит, если разубедите меня в обратном, поставлю его :) сам бота пишу. Регать домен и получать, даже бесплатный, сертификат, ради того чтоб в итоге получит не рабочее приложение, того не стоит.
Очень даже подходит, мой бот не жалуется. Точнее, сервера телеграма на него не жалуются.
Бесплатный, тот который на год. Там важно сделать правильную цепочку сертификатов.
Можно продробнее что за цепочка?
А то вот такая ошибка на бесплатном сертифкате от StartSSL
Longman\TelegramBot\Exception\TelegramException: cURL error 60: SSL certificate problem: self signed certificate in certificate chain (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\base\basic\vendor\longman\telegram-bot\src\Request.php:184
Stack trace:

Если ещё актуально, нашел интересную статью о 3-ех летнем бесплатном сертификате. Правда ещё не пробовал.
В ней так-же есть ссылка на статью по настройке SSL в Ngnix — это чтобы вообще не париться и поднять всё минут за 20-30.
Уже настроил StartSSL все шикарно работает, но 3х летний сертификат заинтересовал :)
Чем не подходит?
Прекрасно работают и распознаются его сертификаты.
Получить бесплатный сертификат дело получаса, а удобства при работе через вебхуки куда больше чем изгаляться с getUpdates
Я не заметил ничего сложного в getUpdates. Метод поддерживает Long-Poll, что очень удобно, а скрипт который работает бесконечно — остался от одного из прошлых проектов. Единственный минус на мой взгляд — не на каждом хостинге запустишь.

Ну а если честно, я лишь однажды делал SSL и совсем не помню, как он настраивается.
Если мой трехчасовой труд перерастет в проект, обещаю, доделать Webhook ;)
В дополнение к статье автора: недавно выложил в opensource похожую систему.
Только там уже свой сервер для обработки и хранения чатов. Может кому пригодится :)
github.com/edolganov/live-chat-engine
Большим плюсом для Вашей системы будет связка административной части с одним из существующих мессенджеров.!
Да, вы правы. После вашей статьи понимаю, что это очень полезная фича.
О, коллега! Я начал делать похожий сервис, 1 в 1 :) Только не на PHP, а на Node.

Затем забросил, из-за того, что в текущей реализации API нельзя узнать, есть ли операторы в сети или нет. Без этой функции нельзя, к сожалению, клиенты будут писать в пустоту, неизвестно, ответит кто-то или нет. Это ставит крест на использовании сервиса на большинстве сайтов.

Далее случайно была найдена Chatra.io. У нее уже есть все эти возможности и она бесплатная. Все нужные функции есть в бесплатной редакции. Мессенджер кроссплатформенный и гораздо удобнее реализован (кстати, похож на телеграмм).
Да, я даже не подумал об этой проблеме.
Дело в том, что у нас каждый сотрудников не много и каждый спокойно может быть менеджером и отвечать на вопросы клиентов.
Те кто реально отвечают на сообщения пользователей — носят с собой смартфоны с Telegram и отвечают оперативно, хоть в метро, хоть на отдыхе, хоть на пробежке (и такое бывает). У нас Telegram- это корпоративный чатик.

Но для больших компаний это конечно проблема (хотя я вижу несколько решений).

Кстати на сайте Chatra.io есть ограничение бесплатной версии «Число операторов онлайн — 5»
Какие решения? Писать сколько минут назад оператор был активен — не вариант.

По поводу 5 операторов, для небольших сайтов хватает с лихвой, тем более, никто не запрещает одновременно пользоваться аккаунтом одного оператора сразу на нескольких машинах.

Я этот сервис рассматривал как бюджетный вариант для небольших сайтов, на замену всяким JivoSite и пр, которые просят > 500 руб в месяц.
Оператор оффлайн потому-что он отошел в туалет/покурить?
Или его сегодня нет в офисе?

В первом случае — Charta не спасет нас, ведь «Писать сколько минут назад оператор был активен — не вариант». Тут у Telegram есть плюс, потому что его можно взять с собой.
Во втором случае — можно сделать ежедневную утреннюю регистрацию менеджера в офисе, через тот же бот.

Как вариант — через 10 секунд молчания — переключать чат на другого менеджера.

Может я не до конца проблему, опишите. В чем в данном случае преимущество Chatra.io над предложенным сервисом?

У вас предполагается, что оператор всегда за компом и отлучается от него ненадолго. В мелких конторах не держат операторов, отвечают на вопросы сами хозяева, они не всегда за компьютером. Т.е. они или есть или их нет.

Думаю что тут можно сделать таким образом: при нажатии посетителем на кнопку «Начать чат», окно с чатом раскрывается и оператору падает сообщение: «Новый посетитель с именем Вася входит в Чат...». В случае, если в течение определенного времени оператор ничего не пишет боту, то мы показываем посетителю надпись: «К сожалению нет операторов онлайн, но ваше сообщение мы обязательно прочитаем, напишите ваш email или сотовый чтобы мы могли связаться с вами». Вопрос только в том, насколько это сильно будет раздражать посетителей :)

Преимущество Chatra лично для меня получается в том, что удобнее переписываться с разными посетителями, не надо выискивать в истории кто кому написал в общем потоке. Ну и по вышесказанному тоже.
только что в чате чатры мне сказали, что у них есть мобильные приложения. Так что, их тоже можно взять в… хм, покурить 8-)
Хорошо 8-) вы дружно меня победили!
Удаляю реп, регистрируюсь в «чарте»!
Нет-нет, ни в коем случае.
реп пусть остается. Хоть я и не люблю РНР 8-)
но ссылочку засейвил, чтоб потом посмотреть, как сделано — вдруг возникнет таки желание навалять велосипед.
Вот и сдулся Chatra.io один оператор онлайн в бесплатной версии. И так с любым новым сервисом онлайн консультантов. Так что пилите Андрей. Оно того стоит.
Мы сделали telme.chat, работает, бесплатно.
Пока нет адекватной возможности создавать для каждого пользователя отдельной «чат-комнаты» с менеджером не вижу особой монетизации сервиса. Да и блокировки радости не прибавляют...)
Я не очень понял такую вещь — менеджер с помощью команды переключает свое окно чата на разных пользователей?
Получается, что все истории у него сваливаются в одно окно?
Понятно, что тут менеджер говорит с ботом, поэтому автоматическое разделение сеансов не работает.
Но можно ли как-то:
— разделить сеансы общения с одним и тем же ботом?
— дать этим сеансам разные имена?
Вот тоже очень напрягает сток всей переписки с разными клиентами в один поток.
В телеграмме же есть чаткомнаты (групповые чаты). Апи Бота позволяет создавать для каждого клиента свой групповой чат — с выбранным менеджером и подписывать его названием чата?
Я смотрел АПИ, но я не вижу там возможности для бота инициировать беседу или сделать ее групповой. Кроме того, по умолчанию, id индивидуального чата совпадает с id пользователя, что как бы намекает на дискуссию 1:1 без комнат — все в кучу.
Бот может получить уведомление, что чат стал групповым и что у него изменилось название. Но как он может сам это сделать — загадка.
У меня была мысль иметь для пользователя один центральный чат, в который будут присылаться ссылки на открывание отдельных чатов. Не очень понятно про core.telegram.org/bots#deep-linking
Если пользователю прислать ссылку с разными значениями start, у него будут открываться отдельные окна переписки?
telegram.me/triviabot?start=1
Following a link with the start parameter will open a one-on-one conversation with the bot, showing a START button in the place of the input field

Эта ссылка открывает тот же самый чат, на месте поля ввода — будет кнопка старт.

If the startgroup parameter is used, the user will be prompted to select a group to add the bot to

В случае, если передан параметр "startgroup" — Вам предложат выбрать группу в которую вы хотите добавить бота.

Your bot will receive a message from that user in this format:
/start PAYLOAD
PAYLOAD stands for the value of the start or startgroup parameter that was passed in the link.


Как только пользователь нажмет Start или добавит бота в группу, бот доставит Вам сообщение (через webhook или getupdates) «/start PAYLOAD», где PAYLOAD — это параметр переданный в ссылке.

А вот дальше (https://core.telegram.org/bots#deep-linking-example) я не разобрался и ничего не понял.
Если кто-то переведет и объяснит — буду благодарен.

Но вот про «создание_ботом_новых_чатов» я в API ничего не нашел…
Благодарю за объяснение.

> А вот дальше (https://core.telegram.org/bots#deep-linking-example) я не разобрался и ничего не понял.
Пример совершенно дурацкий — я тоже не сразу допер зачем же мне предлагают подключать memcache к телеграму. :)
На самом деле надо выкинуть все, что касается этого мемкеша, base64 и сразу становится понятно.

Задача: мы хотим авторизовать пользователя через телеграм.
1. Даем ему ссылку на нашего бота, в ссылку зашиваем рандомный ключ авторизации — тот самый PAYLOAD.
2. Пользователь тыкает на эту ссылку — у него откроется окно нашего бота. Внизу чата вместо поля для ввода текста у пользователя будет кнопка Start. Нажав ее, пользователь отправит боту сообщение /start PAYLOAD.
3. Бот получает сообщение:
{
         "message" : {
            "text" : "/start PAYLOAD",     //    <--------
            "date" : 1438985300,
            "message_id" : 16,
            "from" : {
               "first_name" : "Habra",
               "id" : 110304546,           //    <---------
               "last_name" : "User"
            },
            "chat" : {
               "id" : 110304546,
               "first_name" : "Habra",
               "last_name" : "User"
            }
         },
         "update_id" : 10336636
      }

4. По PAYLOAD понимаем кто именно из пользователей к нам пришел. Извлекаем id юзера, сохраняем себе в БД для аутентификации пользователя в будущем.
Я с Вами полностью согласен, это пожалуй единственная крупная проблема, которая мешает комфортно работать.
Красивых решений я пока не нашел. В текущей версии API — Бот создавать комнаты не может.

Вижу пару некрасивых решений:
1) оставить как есть и ждать доработок API
2) регистрировать на каждый проект десять+ ботов, чтобы распределять по ним чат

Если у Вас есть идеи, как можно решить эту проблему — буду рад услышать :)
Я был бы даже не против, если бы не бот, а человек сам создавал комнаты с подачи бота. Причем реализовать это очень просто, добавив параметры к запуску бота. Например, так:

https://telegram.me/Bot?startnew=PAYLOAD&title=Title+of+new+chat.

Пользователю придет команда на запуск отдельного чата с заданным заголовком с нашим же ботом.
Тем самым мы оставляем контроль за пользователем — бот все так же не может открыть новый чат с пользователем или написать ему первым, не может потихоньку переименовать комнату чата, чтобы пользователь по ошибке написал туда что-то ненужное. Можно даже сделать, чтобы все такие чаты имели заголовок вида «ИмяБота: Title+of+new+chat.» — тем самым сразу понятно по заголовку и картинке с каким именно ботом идет общение.

Как написать тикет с предложением в телеграм? :)
> 1) оставить как есть и ждать доработок API
Или попросить добавить.
Доработка минимальная, полностью укладывается в их стратегию.

> 2) регистрировать на каждый проект десять+ ботов, чтобы распределять по ним чат
После 20-го вам BotFather ответит )
Поможете сформулировать текст обращения к разработчкам Telegram?
Даже не знаю, как подступиться, ведь у них наверняка есть свой план развития…
У нас давно было нечто подобное с работой через аську.
Отлично работало с кучей клиентов, когда для каждого клиента генерился ID и бот воспринимал ответ вида ID сообщение клиенту
Круто!
Я когда-то пытался такую штуку на базе ICQ сделать, но во времена ICQ — мне еще не хватало знаний и умений для этого.
сыроват вариант. начал ловить 504.

[25-Oct-2015 15:09:58] [pool *****] pid 66509
script_filename = /usr/home/*****/www/bot/tbGetMessages.php
[0x0000000801821938] usleep() /usr/home/*****/www/bot/tbGetMessages.php:79
А собственно, какие преимущества делать интерфейс сервиса через telegram бота, вместо обыкновенного веб сайта адаптированного для мобильного?
Я пытаюсь их увидеть и пока вижу только, что бот имеет id user'a в telegram и потом владелец бота может контактировать с ним.
Интересно, может ли бот произвольно написать юзеру с которым когда-то общался?
Это было бы аналогом Android notification's

Only those users with full accounts are able to leave comments. Log in, please.