Действия в Google - получение 200, но без уведомления - PullRequest
0 голосов
/ 29 сентября 2018

Я использую webhook и c # для выполнения своей логики в действии.

Я подписался на два намерения и захватил «UpdateUserId».

Вот полезная нагрузка уведомления

        { 
            "customPushMessage": {
                "target": {
                    "userId": "ABwppHFW6M9ASVqbKFBigM8N0mgssCJmPlwarmgzil_Nk_YsdZ1evzTAggEh0aEsctjOIYg2uHc8n7KfzNuHLuJoirXW",
                    "intent": "NotificationIntent",
                    "argument": {
                        "rawText": "Notification Argument Raw Text",
                        "textValue": "Notification Argument Text Value",
                        "name": "Notification Argument"
                    },
                    "locale": "en-US"
                },
                "userNotification": {
                    "title": "Notification Title",
                    "text": "Notification Text"
                }
            }
        }

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

    private static async Task<string> GetAccessTokenFromJsonKeyAsync(string jsonKeyFilePath, params string[] scopes)
    {
        using (var stream = new FileStream(jsonKeyFilePath, FileMode.Open, FileAccess.Read))
        {
            return await GoogleCredential
                .FromStream(stream) // Loads key file  
                .CreateScoped(scopes) // Gathers scopes requested  
                .UnderlyingCredential // Gets the credentials  
                .GetAccessTokenForRequestAsync(); // Gets the Access Token  
        }
    }

    public async Task<HttpResponseMessage> SendNotificationMessage(ProactiveMessage proactiveMessage)
    {
        try
        {
            var accessToken = await GetAccessTokenFromJsonKeyAsync("key.json", "https://www.googleapis.com/auth/actions.fulfillment.conversation");

            var serialized = JsonConvert.SerializeObject(proactiveMessage);
            var payload = "{\"customPushMessage\": " + serialized + "}";

            // Wrap our JSON inside a StringContent which then can be used by the HttpClient class
            var httpContent = new StringContent(payload, Encoding.UTF8, "application/json");

            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            var httpResponseMessage = await _httpClient.PostAsync($"{_hostUrl}", httpContent);

            Console.WriteLine(httpResponseMessage.IsSuccessStatusCode ? "Successfully sent notification message." : $"Failed to send notification message with {httpResponseMessage.StatusCode}.");

            return httpResponseMessage;
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"Google Assistant Service: Failed to send notification message with exception: {ex.Message}");
            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        }
    }

Метод возвращает ответ 200.Однако на моем телефоне никогда не появляется уведомление.

Я не уверен, каковы мои дальнейшие шаги по отладке.

Поскольку уведомления все еще не являются общедоступными, является ли это общей проблемой?

1 Ответ

0 голосов
/ 13 мая 2019

У меня была такая же проблема.Я получил 200 кодов состояния, но на целевое устройство не пришло никаких уведомлений.

Я повторил попытку примерно через 2 дня, и она работала без проблем и с тех пор работает.Единственное объяснение, которое я могу придумать, заключается в том, что в фоновом режиме выполняется какая-то конфигурация.

...