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

Почему некорректно не работает ConversationStartedOnFinishCallback в Viber боте?

Всем доброго! Ври написании небольшого бота для Viber столкнулся с проблемой при вызове колбека onFinish в методе onConversationStarted

https://github.com/Viber/viber-bot-node#Conversati...

В принципе, код из примера работает
bot.onConversationStarted((userProfile, isSubscribed, context, onFinish) =>
	onFinish(new TextMessage(`Hi, ${userProfile.name}! Nice to meet you.`)));


но если перед onFinish попытатся сделать какой-то асинхронный запрос к БД или куда-то еще, получаются проблемы

bot.onConversationStarted((userProfile, isSubscribed, context, onFinish) =>

	doSomeRequest(context)
		.then(responseData =>{
			onFinish(new TextMessage(`Hi! here is data from responseData ${responseData}`))
		})

);


В таком случае после первого запуска бота (не сервере) onFinish не срабатывает (бот не отправляет сообщения), но если потом попытатся обратится к боту, onFinish уже срабатывает (бот отправил сообщения).

Дальше еще интереснее, наблюдаю что-то вроде кеша.

Когда onFinish все же сработал, бот отправил сообщения, получается, что бот отправил сообщения со страрыми данными, то есть данными предыдущего сообщения.

То есть если в onConversationStarted в текущей сесии/запросе к боту в параметр context, скажем, было передано 2, далее это значения было передано в запрос doSomeRequest. и в ответе responseData получено что-то типа
responseData2, то если перед этим был запрос к боту, но с context, равным 1, то вопреки тому, что в даном запросе мы работаем с входными даными, значения context, которые сейчас равны 2, то onFinish и, соответствено, сообщения в боте, я получаю с результатом 1.

Подскажите, пожалуйста, может кто-то уже сталкивался с подобным?
  • Вопрос задан
  • 95 просмотров
Подписаться 2 Средний 2 комментария
Решения вопроса 1
@Scorpiored88 Автор вопроса
Да, разобрался, нужно вместо onFinish вызивать sendMessage, и все отлично работает
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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