Задать вопрос
@nexus7777

Как правильно отправлять сообщения через открытую линию в Битрикс24?

После отправки сообщения из ОЛ во внешнюю систему у сообщения, через минуту, появляется статус "Сообщение не доставлено". После обновления страницы с чатом статус пропадает.

6347c2167fa25073525691.png

Использую пример из этого кейса https://dev.1c-bitrix.ru/rest_help/imconnector/cas...

Метод "imconnector.send.status.delivery" присутствует, но он не решает эту проблему. Или его нужно вызывать повторно в какой-то момент?
  • Вопрос задан
  • 768 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Академия Eduson
    Управление цифровой трансформацией
    8 месяцев
    Далее
  • OTUS
    Интегратор Битрикс24
    4 месяца
    Далее
  • MAED
    CRM от А до Я
    4 месяца
    Далее
Решения вопроса 1
Для потомков
$chat = CRest::call(
  'imconnector.send.status.delivery',
  [
    "CONNECTOR" => "connector_name",
    "LINE" => line_id,
    "MESSAGES" => [
        [
        "im" => ["chat_id" => "XXXX", "message_id" => "XXXXX"],
        "message" => ["id" => "XXX"],
        "chat" => ["id" => "XXX"]
        ]
    ]
  ]
);
echo '<pre>';
var_dump($chat);
echo '</pre>';


Расшифровка:
connector_name - имя коннектора, которое ему было задано при регистрации (берем из imconnector.register => ID)
line_id - идентификатор открытой линии
Массив MESSAGES:
im:
chat_id - идентификатор чата из битрикса (можно найти либо через консоль разработчика (f12), либо с помощью команды /getDialogId в чате)
message_id - идентификатор сообщения в битрикс (можно найти либо через консоль разработчика (f12), либо с помощью метода im.dialog.messages.get)
message:
id - это ID сообщения во внешней системе (в вашем чате), задается при отправке сообщения в методе imconnector.send.messages
chat:
id - это ID чата во внешней системе (в вашем чате), задается при отправке сообщения в методе imconnector.send.messages

В примере из кейса битрикса стоит интервал на запросы каждые 5 секунд - это вариант 1
Можно метод запускать сразу после отправки пользователем стороннего чата сообщения - это вариант 2
Также есть событие OnImConnectorMessageAdd, но в документации указано, что
Событие выбрасывается для полноценных коннекторов таких как Телеграм или ВКонтакте
- это вариант 3
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webgromov
@webgromov
webgromov.ru
Ладно, допустим я пытался разобраться в этом методе 2 дня. Мне никто не смог помочь. Я выкурил пачку сигарет и 300 раз обозвал битрикс

По методу imconnector.send.status.delivery (подтверждение доставки сообщения от оператора) (который отмечает сообщение прочитанным) - найдено решение. Делюсь, т.к. у меня это отняло очень много времени.

В документации метода (Обновить статус «доставлено» imconnector.send.status.delivery) описаны параметры. Но массив messages в виде массива на PHP. Я весь день долбался с тем, какие данные отправить в messages, хоть какой-то ответ пришёл в DATA. изначально приходило это.
"result": {
"SUCCESS": true,
"DATA": []
},
1. Первое и самое важное - не ждите данных в DATA
Они никогда не придут. У меня получилось прочитать со стороны пользователя, но в DATA так ничего и не пришло.

2. Второе - работающие параметры в json выглядят так:
{
"auth": "{{access_token}}",
"CONNECTOR":"gromov_test",
"LINE":16,
"MESSAGES": [{
"im": {
"chat_id": 840,
"message_id": 69046
},
"message": {"id": ["ext-message-3464"]},
"chat": {"id": "ext-chat-3354"}
}]
}

3. Объяснение парамтеров в messages
auth - ключ аутентификации
CONNECTOR, LINE - Коннектор и открытая линия, как обычно
im - объект im из объекта вебхука сообщения. для получения вебхуков
- чтобы получать вебхуки - прочитайте о событиях
- подключите свой кастомный обработчик (ссылку) через API, чтобы принимать вебхуки на свой адрес
- для тестового получения объекта сообщения можно использовать https://webhook.site

По стандарту это массив с chat_id и message_id из чата.

Так вот, объекты message и chat - сюда можно вписать вообще любые варианты. Это ваши произвольные внешние айдишники, которые вы присваиваете сообщению.

4. Зачем нужны id сообщения и чата из ВНЕШНЕЙ системы
Логика в том, что типо вы написали в открытую линию. Далее сообщение отправилось в телеграм, ему присвоился id сообщения и соответственно там же есть id чата. И вы отправляете их в bitrix. Тем самым подтвердив, что сообщение доставлено.

5. Параметры message и chat - необязательные. Параметр "message": {"id": ["ext-message-3464"]} всего-лишь добавляет значение params: {connectorMid}. А chat вообще ничего не добавляет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы