Перейти к содержанию

Работа с редактируемыми и удаленными сообщениями#

Бета-версия

Функциональность находится в стадии бета-тестирования. Функции могут быть изменены, а также могут работать нестабильно.

Рекомендации по работе с редактируемыми и удаленными сообщениями:
1. Настройка инстанса
2. Работа с редактируемыми сообщениями
3. Работа с удаленными сообщениями

1. Настройка инстанса#

Для работы с уведомлениями о редактируемых и удаленных сообщениях требуется включить настройки на инстансе editedMessageWebhook и deletedMessageWebhook (по умолчанию настройки отключены).

Включение настройки можно сделать через:

  1. Личный кабинет, в настройках инстанса;

  2. Метод установки настроек SetSettings указав "editedMessageWebhook":"yes", "deletedMessageWebhook":"yes";

  3. Метод партнера CreateInstance указав "editedMessageWebhook":"yes", "deletedMessageWebhook":"yes" при создании инстанса;

2. Работа с редактируемыми сообщениями#

Метод EditMessage#

При вызове метода EditMessage в ответ Вы получите idMessage, это идентификатор редактируемого сообщения, по нему можно в дальнейшем получить уведомление о результате выполнения редактирования, так же можно отслеживать какой именно пользователь сделал редактирование сообщения (если в системе находится несколько операторов).

Обработка уведомлений#

При редактировании сообщения получателем, отправителем через API или устройство формируется уведомление типа editedMessageWebhook.
Требуется сделать обработку данного уведомления, а именно отслеживать поле stanzaId, в нем будет указано оригинальное сообщение, которое было исправлено Вами или Вашим собеседником. Необходимо зафиксировать данные изменения у Вас в базе и обновить данные на клиентской части интеграции.
Поле textMessage содержит новый текст сообщения.

Рекомендуем делать обработку только требуемых Вам уведомлений, Ваш сервис обработчика должен найти обязательное поле typeWebhook и в зависимости от его типа обработать или сбросить уведомление, так Вы будете обрабатывать только нужные Вам типы событий, а неверные настройки инстанса или выходы новых релизов API не нарушат работу Вашей интеграции.

Работа через журналы#

При работе через методы журналирования, определение редактированного сообщения можно делать по полю isEdited: true.
Для актуализации переписки в чате требуется определять сообщения, которые были получены или отправлены за последние 15 минут (допустимое время редактирования сообщений) и производить их обновления каждые 10-15 секунд методом GetChatHistory.
Также обновление оригинального сообщения можно производить методом GetMessage, запросив сообщение из журнала, оно будет содержать последние данные по обновленному сообщению и будет иметь поле isEdited: true.

Обратите внимание#

  1. Уведомления о редактируемых сообщениях приходят по всем типам сообщений (входящие, исходящие, отправленные с АПИ и с телефона), в зависимости от этого будет указан тип уведомления incomingMessageReceived, outgoingAPIMessageReceived, outgoingMessageReceived.

  2. В журналах отредактированные сообщения будут иметь разные типы outgoing и incoming в зависимости от того кто отредактировал сообщение: Вы или Ваш собеседник. В журнале будет только запись с оригинальным сообщением и полем isEdited: true, указывающим, что сообщение редактировалось.

  3. Метод редактирования сообщений работает через очередь сообщений и если на инстансе выполнялась рассылка и образовалась очередь то редактирование не произойдет мгновенно, а только в тот момент, когда сообщение будет взято в обработку.

  4. Если обработка редактируемого сообщения системой не произойдет в течение 15 минут с момента написания оригинального сообщения, то изменение сообщения не произойдет, а на запрос редактирования сообщения будет сформировано уведомление с ошибкой редактирования сообщения (статус failed), в описании уведомления будет указана причина ошибки поле description.

  5. Если неверно указано сообщение при вызове метода, то сформируется уведомление с ошибкой редактирования сообщения (статус failed), в описании уведомления будет указана причина ошибки поле description.

3. Работа с удаленными сообщениями#

Метод DeleteMessage#

При вызове метода DeleteMessage в ответ Вы получите статус код 200 и пустое тело.
Система формирует идентификатор события удаления сообщения, данный идентификатор будет указан в уведомлении по событию удаления сообщения.

Обработка уведомлений#

При удалении сообщения получателем, отправителем через API или устройство формируется уведомление типа deletedMessageWebhook.
Требуется сделать обработку данного уведомления, а именно отслеживать поле stanzaId, в нем будет указано оригинальное сообщение, которое было удалено Вами или Вашим собеседником. Необходимо зафиксировать данные изменения у Вас в базе и обновить данные на клиентской части интеграции.

Рекомендуем делать обработку только требуемых Вам уведомлений, Ваш сервис обработчика должен найти обязательное поле typeWebhook и в зависимости от его типа обработать или сбросить уведомление, так Вы будете обрабатывать только нужные Вам типы событий, а неверные настройки инстанса или выходы новых релизов API не нарушат работу Вашей интеграции.

Работа через журналы#

При работе через методы журналирования, определение удаленного сообщения можно делать по полю isDeleted: true.
Для актуализации переписки в чате требуется производить их обновления каждые 10-15 секунд методом GetChatHistory.
Так же обновление оригинального сообщения можно производить методом GetMessage запросив сообщение из журнала, оно будет содержать последние данные по удаленному сообщению и будет иметь поле isDeleted: true.

Обратите внимание#

  1. Уведомления о удаленных сообщениях приходят по всем типам сообщений (входящие, исходящие отправленные с АПИ и с телефона), в зависимости от этого будет указан тип уведомления incomingMessageReceived, outgoingAPIMessageReceived, outgoingMessageReceived.

  2. В журналах удаленные сообщения будут иметь разные типы outgoing и incoming в зависимости от того кто удалил сообщение: Вы или Ваш собеседник. В журнале будет запись с оригинальным сообщением и полем isDeleted: true, указывающим, что сообщение было удалено.

  3. В журнале будут зафиксированы все события удаления сообщений (кто, в каком чате и когда удалил сообщение), также указан stanzaId оригинального удаленного сообщения. Оригинальное сообщение из журнала не удаляется, оно меняет поле на isDeleted: true.