Задать контекст вывода параметров из цикла в диалоге - PullRequest
0 голосов
/ 06 марта 2020

я делаю l oop для вызова данных из firebase, как установить идентификатор документа в качестве параметров для моего выходного контекста, когда я выбрал данные из документа?

это мой код для функции daftaKota

function daftarKota(agent){
const query = db.collection('kota');
return query.get().then(s =>{
    if (s.empty){
        agent.add('belum ada kota yang didaftarkan oleh Pemilik');
        agent.add('untuk mengakses menu lainnya silahkan ketikan "menu"');
        agent.context.set('menu',2);
    } else {
      agent.add('berikut daftar kota');
      s.forEach(doc =>{
        agent.add(new Suggestion(doc.data().nama_kota));
        agent.context.set('lihat-toko',5,{'id_kota' : doc.id,'nama_kota' : doc.data().nama_kota});
      });
    }
});

это мой код для функции daftarToko

function daftarToko (agent){
const context = agent.context.get('lihat-toko');
const idKota = context.parameters.id_kota;
const nKota = agent.parameters.kota;

const query = db.collection('toko').where('id_kota','==',idKota);
return query.get().then(s =>{
  if (s.empty){
    agent.add('Belum ada Toko yang didaftarkan di kota ini');
    agent.add('untuk mengakses kota lainnya silahkan ketikan "kembali"');
    agent.context.set('order',2);
  }else{
    agent.add('berikut daftar toko di kota '+nKota);
    s.forEach(doc => {
      agent.add(new Card({title : doc.data().nama_toko, imageUrl : doc.data().gambar_toko}));
      agent.add(new Suggestion(doc.data().nama_toko));
      agent.context.set('lihat-kue',5,{'id_toko' : doc.id});
    });
  }
});

и это карта намерений

intentMap.set('Daftar Kota',daftarKota);
intentMap.set('Daftar Toko',daftarToko);

это мое намерение "Daftar Kota" Intent Daftar Kota

это намерение показать город из базы данных, используя подсказку Suggestion

, когда я выбрал другой город подсказки, такой как Джокьякарта, Джакарта или Бандунг, параметры все еще установлены на Banjarmasin.

это мой ответ API после выбора Джокьякарты

{
  "responseId": "9e1daa4d-31f8-4a62-a939-813be357a634-19db3199",
  "queryResult": {
    "queryText": "Yogyakarta",
    "parameters": {
      "kota": "Yogyakarta"
    },
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Belum ada Toko yang didaftarkan di kota ini"
          ]
        }
      },
      {
        "text": {
          "text": [
            "untuk mengakses kota lainnya silahkan ketikan \"kembali\""
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/jastip-21e34/agent/sessions/771d2ffc-b490-51f3-7da7-78b91faa8ad3/contexts/order",
        "lifespanCount": 2
      },
      {
        "name": "projects/jastip-21e34/agent/sessions/771d2ffc-b490-51f3-7da7-78b91faa8ad3/contexts/lihat-toko",
        "lifespanCount": 4,
        "parameters": {
          "kota": "Yogyakarta",
          "nama_kota": "Banjarmasin",
          "id_kota": "qCjS54XPf1lAtECUFTTw",
          "kota.original": "Yogyakarta"
        }
      }
    ],
    "intent": {
      "name": "projects/jastip-21e34/agent/intents/f14ab0fa-b506-419d-a360-a8eb7cd84b93",
      "displayName": "Daftar Toko"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 236
    },
    "languageCode": "id"
  },
  "webhookStatus": {
    "message": "Webhook execution successful"
  }
}

см. в параметрах:

  1. я выбрал "kota: Джокьякарта",
  2. но id_kota - это идентификатор документа nama_kota "Банджармасин", а не идентификатор "Джокьякарты"

1 Ответ

0 голосов
/ 06 марта 2020

Вы не показываете запрос, который используете или где храните полученные параметры, но в вашем l oop вы на самом деле не проверяете, соответствует ли nama_kota значение kota который отправляется через параметры. Таким образом, он меняет контекст каждый раз, когда он проходит через l oop, и в итоге получает новые параметры с последнего раза.

Одним из решений было бы проверить, совпадают ли они, и когда они это делают установить контекст.

  s.forEach(doc =>{
    agent.add(new Suggestion(doc.data().nama_kota));
    if( parameters.kota === doc.data().nama_kota ){
      agent.context.set('lihat-toko',5,{'id_kota' : doc.id,'nama_kota' : doc.data().nama_kota});
    }
  });
...