dialogflow - 如何获取会话 ID?

Posted

技术标签:

【中文标题】dialogflow - 如何获取会话 ID?【英文标题】:dialogflow - how to get session id? 【发布时间】:2019-01-22 21:58:18 【问题描述】:

首先,我是一个对话流和网络服务的菜鸟。我正在尝试集成我刚刚创建的对话流代理,并将其与本地计算机上的应用程序集成。我能够获得 project_id 和所有其他重要信息,但无论我在哪里看,似乎没有人谈论他们从哪里获得会话 ID。这是我正在使用的音频到文本的代码,它来自 api.ai github 页面:

import os
import dialogflow_v2 as dialogflow
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "My Google Credential"
project_id = 'project id'
session_id = "this i don't know where to get"
audio_file_path = 'my wave file directory name'
language_code = 'en'

def detect_intent_audio(project_id, session_id, audio_file_path,
                        language_code):
    """Returns the result of detect intent with an audio file as input.

    Using the same `session_id` between requests allows continuation
    of the conversaion."""

    session_client = dialogflow.SessionsClient()

    # Note: hard coding audio_encoding and sample_rate_hertz for simplicity.
    audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16
    sample_rate_hertz = 44100

    session = session_client.session_path(project_id, session_id)
    print('Session path: \n'.format(session))

    with open(audio_file_path, 'rb') as audio_file:
        input_audio = audio_file.read()

    audio_config = dialogflow.types.InputAudioConfig(
        audio_encoding=audio_encoding, language_code=language_code,
        sample_rate_hertz=sample_rate_hertz)
    query_input = dialogflow.types.QueryInput(audio_config=audio_config)

    response = session_client.detect_intent(
        session=session, query_input=query_input,
        input_audio=input_audio)

    print('=' * 20)
    print('Query text: '.format(response.query_result.query_text))
    print('Detected intent:  (confidence: )\n'.format(
        response.query_result.intent.display_name,
        response.query_result.intent_detection_confidence))
    print('Fulfillment text: \n'.format(
        response.query_result.fulfillment_text))

detect_intent_audio(project_id, session_id, audio_file_path,
                        language_code)

我启用了 webhook 并将 webhook 链接到 heroku,但我仍然看不到在哪里可以获得此会话 ID。有人可以帮我吗?

【问题讨论】:

【参考方案1】:

在链接上, https://dialogflow.com/docs/reference/api-v2/rest/v2/projects.agent.sessions/detectIntent ,在HTTP请求会话路径参数下有说明 “由 API 调用者选择合适的会话 ID。它可以是随机数或某种类型的用户标识符(最好是散列)。会话 ID 的长度不得超过 36 个字节。”

【讨论】:

后来我发现会话ID可以是任何字符串。不过谢谢! 嗨,我正在寻找这个,我不想创建会话 ID,而是从 javascript dialogflow V2 访问会话 ID @Gino 您可以尝试以下操作:exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => const agent = new WebhookClient( request, response ); console.log ('Dialogflow 请求标头:' + JSON.stringify(request.headers)); console.log('Dialogflow 请求正文:' + JSON.stringify(request.body)); var session_id = request.body.session; var session_id_array = session_id.split("/"); session_id = session_id_array[session_id_array.length - 1];

以上是关于dialogflow - 如何获取会话 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dialogflow 上实现 Permission API

如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow

如何管理 Dialogflow / Api.ai 中的 5 秒响应超时限制?

如何在 C# 中调用 google.apis.dialogflow.v2

如果我有会话 ID,如何获取会话参数详细信息

如何获取 tokbox 存档会话的存档 ID?