Я сделал бот, набирающий текст на Python, который работает локально, но не на сервере. В чем проблема?

#wordpress #heroku #iframe #botframework #chatbot

#wordpress #heroku #iframe #botframework #чат-бот

Вопрос:

Я набрал бота на python,

который работает локально, но не на сервере.

В чем проблема?

Я пишу правильный код,

И это работает на эмуляторе Python.

Но не на сервере.

 async def create_reply_activity_typing(request_activity: Activity, text: str, attachment: Attachment = None) -> Activity:
activity = Activity(
    type=ActivityTypes.typing,
    channel_id=request_activity.channel_id,
    conversation=request_activity.conversation,
    recipient=request_activity.from_property,
    from_property=request_activity.recipient,
    text=None,
    service_url=request_activity.service_url)
return activity
  

#### И ниже приведен код, который фактически отправляет действие.

 async def request_handler(context: TurnContext) -> web.Response:
if context.activity.type == 'message':
  prompt_message = await create_reply_activity_typing(context.activity, None)
  time.sleep(5)
  await context.send_activity(prompt_message)
  return await handle_message(context)
  

Комментарии:

1. Похоже, вы правильно создаете свою активность. На самом деле вам нужно только установить тип. Их адаптер заполняет все остальные значения. Не могли бы вы, пожалуйста, добавить код, в который вы фактически отправляете действия? Кроме того, используете ли вы BotChat или iFrame?

2. Привет! Я использую iframe. в wordpress. Также я использую сервер heroku. И я прошу прощения за то, что не вставил снимок экрана. пожалуйста, ответьте на мой вопрос, вставленный здесь. github.com/Microsoft/botbuilder-python/issues/147

3. @tdurnford Я просто отредактировал вопрос. И у меня есть еще один вопрос, как сделать так, чтобы значение отображалось непосредственно на стороне пользователя, когда пользователь нажимает кнопку на карте? Ссылочный сайт contososcubademo.azurewebsites.net . здесь. Пользователь нажимает кнопку на карточке, но появляется сообщение о том, что пользователь «вводит» значение. Пожалуйста, ответьте, если вы знаете способ. Большое вам спасибо.

4. Мне нужно было бы увидеть ваш код, который создает карточку, чтобы ответить на ваш следующий вопрос. Похоже, вы уже задавали [вопрос] () относительно этой проблемы; однако в настоящее время он заблокирован. Я бы рекомендовал добавить ваши фрагменты кода к вопросу, прежде чем он будет закрыт.

Ответ №1:

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

Что касается событий ввода, чат ботов не ожидает отображения следующего действия, если оно показывает событие ввода. Однако веб-чат делает паузу перед выполнением следующего действия. В настоящее время iFrame отображает чат бота, а эмулятор использует веб-чат, поэтому ваше событие ввода работает в эмуляторе, а не в iFrame. Несмотря на то, что iFrame в настоящее время использует чат ботов, в следующем выпуске, который должен выйти в ближайшие пару дней, iFrame будет обновлен для отображения веб-чата.

Вы можете либо дождаться обновления, либо добавить тайм-аут в свой код после отправки операции ввода.

 prompt_message = await create_reply_activity_typing(context.activity, None)
await context.send_activity(prompt_message)

# Note the timeout needs to be after the activity is sent
time.sleep(5) 

return await handle_message(context)
  

Надеюсь, это поможет!