Как я могу сохранить данные в хранилище из ответа на внешний API - PullRequest
0 голосов
/ 23 февраля 2019

Мы используем облачные функции Firebase для нашего выполнения и внешний API отдыха для наших операций.

У нас есть одно намерение с несколькими повторениями, и оно выглядит следующим образом

 - Create Note
 - - Create Note - fallback*
 - - - Create Note - fallback - yes
 - - - Create Note - fallback - no

* the fallback allows us to capture free text

В нашем веб-крюке у меня есть следующее выполнение

app.intent("Create Note", (conv) => {
    if (!conv.user.storage.note) conv.user.storage.note = {};
    conv.ask("Go ahead, talk to Talkatoo!");
});

app.intent("Create Note - fallback", (conv) => {
    conv.user.storage.input = conv.input.raw;

    let response = conv.user.storage.note
         ? conv.user.storage.note.body.concat(conv.input.raw)
         : conv.user.storage.input;

    conv.ask("So far this is what I heard you say, let me know if this is complete. ", response);
});

app.intent("Create Note - fallback - yes", (conv) => {
    // based on the conv.user.storage.note object
    // either make a call to create a note or update a note

    // make call to external api and based on the response 
    // set the value for conv.user.storage.note

   conv.ask("Great news, let me save that for you!");
});

app.intent("Create Note - fallback - no", (conv) => {
    // based on the conv.user.storage.note object
    // either make a call to create a note or update a note

    // make call to external api and based on the response 
    // set the value for conv.user.storage.note

    // Send the user back to Create Note to capture the rest of their input
   conv.followup("my_custom_event");
});

Проблема в том, что conv.user.storage.note устанавливается, когда я получаю ответ от API, но затем он сбрасывается до пустого, и каждый раз создается новая заметка.Я пытаюсь добавить различные входные данные от пользователя к одной заметке

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Для тех, кому это может в конечном итоге помочь, я нашел сообщение и понял, что для работы с ответами на асинхронные вызовы может потребоваться больше размышлений (чтобы обойти эту проблему) Как сделать асинхронные вызовы из внешних служб для действий надgoogle?

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

app.intent("Intent - fallback", (conv) => {
    conv.user.storage.input = conv.user.storage.input
    ? conv.user.storage.input.concat(conv.input.raw)
    : conv.input.raw;

    conv.ask("Is that complete or would you like to continue?");
});

app.intent("Intent - fallback - yes", (conv) => {

    createNote(conv); <--- makes call to save

    conv.ask("Great news, let me save that for you!");
});

app.intent("Intent - fallback - no", (conv) => {
    conv.followup("my_custom_event");
});
0 голосов
/ 25 февраля 2019

На основании ...

app.intent("Create Note - fallback - yes", (conv) => {
    // based on the conv.user.storage.note object
    // either make a call to create a note or update a note

    // make call to external api and based on the response 
    // set the value for conv.user.storage.note

   conv.ask("Great news, let me save that for you!");
});

похоже, что либо вы еще не написали код для вызова API, либо вы удалили этот код перед публикацией в StackOverflow.Это правильно?

Можете ли вы обновить свой вопрос, чтобы показать, куда и как вы отправляете HTTP-запрос на ваш внешний REST API?

...