PHP Неустранимая ошибка: невозможно повторно объявить проблему с Google Dialogflow PHP API - PullRequest
1 голос
/ 13 января 2020

Возникла проблема с Google Dialogflow. Я получаю сообщение об ошибке: PHP Fatal error: Cannot redeclare Google\Cloud\Samples\Dialogflow\detect_intent_texts() (previously declared in /var/www/fixnode-website/php-docs-samples/dialogflow/src/detect_intent_texts.php:18) in /var/www/fixnode-website/php-docs-samples/dialogflow/src/detect_intent_texts.php on line 74

Есть ли шанс, что кто-то может помочь? Для контекста я использую сторонний SMS API, поэтому я могу создать SMS чатбот. Я полностью очистил остальную часть кода, но каждый тест, который я выполняю, приводит к ошибкам. Не уверен, почему я не могу переопределить библиотеку здесь.

<code><?php
// [START dialogflow_detect_intent_text]

use Google\Cloud\Dialogflow\V2\SessionsClient;
use Google\Cloud\Dialogflow\V2\TextInput;
use Google\Cloud\Dialogflow\V2\QueryInput;
require_once '/var/www/fixnode-website/zang-php/connectors/Sms.php';
require_once __DIR__ . '/../vendor/autoload.php';
/**
 * Returns the result of detect intent with texts as inputs.
 * Using the same `session_id` between requests allows continuation
 * of the conversation.
 */

$SMS = $Body = $_POST['Body'];

function detect_intent_texts($projectId, $texts, $sessionId, $languageCode = 'en-US')
{
    // new session
    $sessionsClient = new SessionsClient();
    $session = $sessionsClient->sessionName($projectId, $sessionId ?: uniqid());
    printf('Session path: %s' . PHP_EOL, $session);

    // query for each string in array
    foreach ($texts as $text) {
        // create text input
        $textInput = new TextInput();
        $textInput->setText($text);
        $textInput->setLanguageCode($languageCode);

        // create query input
        $queryInput = new QueryInput();
        $queryInput->setText($textInput);

        // get response and relevant info
        $response = $sessionsClient->detectIntent($session, $queryInput);
        $queryResult = $response->getQueryResult();
        $queryText = $queryResult->getQueryText();
        $intent = $queryResult->getIntent();
        $displayName = $intent->getDisplayName();
        $confidence = $queryResult->getIntentDetectionConfidence();
        $fulfilmentText = $queryResult->getFulfillmentText();

        // output relevant info
        print(PHP_EOL);
        try {
            $sms = Sms::getInstance();
            $sms -> setOptions(array(
            "account_sid"   => $_ENV["ACCOUNT_SID"],
            "auth_token"    => $_ENV["AUTH_TOKEN"],
            ));
            $sentSms = $sms -> sendSms(array(
            'From'          => '647799XXXX',
            'To'            => '416830XXXX',
            'Body'          => $fulfilmentText,
            'AllowMultiple' => "True"
            ));

            echo "<pre>";
            print_r($sentSms->getResponse());
            echo "
";} catch (ZangException $ e) {echo"
";
               print_r( "Exception message: " . $e -> getMessage() . "<br>");
               print_r( "Exception code: " . $e -> getCode() . "<br>");
               print_r(  $e -> getTrace() );
               echo "
";}} $ sessionClient-> close ();} detect_intent_texts (" boxwood-ray -226216 "," Привет "," 12345678 ");?>

1 Ответ

0 голосов
/ 13 января 2020

Сообщение об ошибке содержит полезную информацию.

Функция detect_intent_texts уже объявлена ​​в Google\Cloud\Samples\Dialogflow пространстве имен в /var/www/fixnode-website/php-docs-samples/dialogflow/src/detect_intent_texts.php

. В вашем скрипте вы заново определяете detect_intent_texts в Google\Cloud\Samples\Dialogflow пространстве имен. Вы не должны объявлять функции в пространствах имен, объявленных в таких вендорных пакетах, как этот.

Вам следует объявить другое пространство имен в вашем скрипте.

Если ваш проект не является Вы можете удалить объявление пространства имен.

<?php
// [START dialogflow_detect_intent_text]
require_once __DIR__ . '/../vendor/autoload.php';
require_once '/var/www/fixnode-website/zang-php/connectors/Sms.php';

use Google\Cloud\Dialogflow\V2\SessionsClient;
use Google\Cloud\Dialogflow\V2\TextInput;
use Google\Cloud\Dialogflow\V2\QueryInput;
...