Как отправить сообщение лазурному боту в python через службу прямой линии

Недавно мы развернули бота в Azure с типом управляемого удостоверения, назначенного пользователем, поэтому у меня есть только идентификатор приложения, но не пароль приложения. Я пытаюсь отправлять сообщения через службу Direct Line из приложения Python. Ниже приведен мой код:

from botframework.connector.auth import MicrosoftAppCredentials
from botframework.connector.client import ConnectorClient

credentials = MicrosoftAppCredentials("YOUR_CLIENT_ID", "")
base_url = "https://directline.botframework.com/"
client = ConnectorClient(credentials, base_url=base_url)

connectorClient = ConnectorClient(credentials, base_url=base_url)
client.conversations.send_to_conversation(conversation_id, message, service_url=base_url)

Я установил пакет Python: botframework-connector==4.14.0.

Я получил ошибку о access_token. Может ли кто-нибудь помочь, что мне не хватает?

Спасибо

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать библиотеку request для отправки прямого сообщения лазурному боту по прямой линии, например:

import requests

# Replace YOUR_DIRECT_LINE_SECRET with your bot's Direct Line secret
direct_line_secret = 'YOUR_DIRECT_LINE_SECRET'

# Set the headers for the request
headers = {
    'Authorization': 'Bearer ' + direct_line_secret,
    'Content-Type': 'application/json'
}

# Set the parameters for the request
data = {
    'type': 'message',
    'from': {
        'id': 'YOUR_USER_ID'
    },
    'text': 'Hello, world!'
}

# Send the request to the Direct Line API
response = requests.post('https://directline.botframework.com/v3/directline/conversations/YOUR_CONVERSATION_ID/activities', json=data, headers=headers)

# Print the response status code
print(response.status_code)

Если вы хотите, чтобы назначенное пользователем управляемое удостоверение аутентифицировало BotFrameworkConnectorClient без указания пароля приложения. Следить за этим :

import os
from botframework.connector import ConnectorClient
from botframework.connector.auth import AzureActiveDirectoryAuthentication

# Replace YOUR_CLIENT_ID and YOUR_TENANT_ID with your own values
CLIENT_ID = 'YOUR_CLIENT_ID'
TENANT_ID = 'YOUR_TENANT_ID'

# Get the access token for the Bot Framework API
auth = AzureActiveDirectoryAuthentication(CLIENT_ID, TENANT_ID)
access_token = auth.get_access_token()

# Create a ConnectorClient
client = ConnectorClient(auth, base_url='https://directline.botframework.com/v3/directline')

# Set the parameters for the request
conversation_id = 'YOUR_CONVERSATION_ID'
activity = {
    'type': 'message',
    'from': {
        'id': 'YOUR_USER_ID'
    },
    'text': 'Hello, world!'
}

# Send the message
response = client.conversations.send_to_conversation(conversation_id, activity)

# Print the response
print(response)

или вы можете использовать ManagedIdentityCredential

import os
from azure.identity import ManagedIdentityCredential
from botframework.connector import ConnectorClient

# Set the resource and tenant ID
RESOURCE = "https://directline.botframework.com"
TENANT_ID = "YOUR_TENANT_ID"

# Create a ManagedIdentityCredential
credential = ManagedIdentityCredential(resource=RESOURCE, tenant_id=TENANT_ID)

# Create a ConnectorClient
client = ConnectorClient(credential, base_url='https://directline.botframework.com/v3/directline')

# Set the parameters for the request
conversation_id = 'YOUR_CONVERSATION_ID'
activity = {
    'type': 'message',
    'from': {
        'id': 'YOUR_USER_ID'
    },
    'text': 'Hello, world!'
}

# Send the message
response = client.conversations.send_to_conversation(conversation_id, activity)

# Print the response
print(response

)

Спасибо за быстрый ответ. Знаете ли вы, есть ли способ добиться этого с помощью botframework-connector. Потому что у нас есть старые боты, созданные без типа (управляемая идентификация, назначенная пользователем), для которых у нас есть пароли, и приведенный выше код работает хорошо.

GLP 05.01.2023 00:15

Хм... У меня нет AzureActiveDirectoryAuthentication в botframework.connector.auth?

GLP 05.01.2023 01:14

вы можете использовать ManagedIdentityCredential из azure.identity

Manu Jo Varghese 05.01.2023 01:59

Спасибо. Я установил azure-identity == 1.5.0, так как в последней версии я получил ошибку. Но я все еще получаю сообщение об ошибке при отправке адаптивной карты боту: Исключение произошло при отправке упреждающего сообщения: объект «ManagedIdentityCredential» не имеет атрибута «signed_session»

GLP 05.01.2023 02:59

На самом деле ошибка заключается в том, что аутентификация ManagedIdentityCredential недоступна, конечная точка управляемого удостоверения не найдена. Нужно ли мне что-либо настраивать на портале Azure?

GLP 05.01.2023 03:28

@GLP Я бы сделал это с помощью библиотеки запросов. Он работает как с управляемой идентификацией, так и с многопользовательскими ботами.

AP01 05.01.2023 18:35

Я отметил это как ответ, потому что в определенном контексте это правильный ответ. Это из chatGPT. Если ваше приложение Python размещено в Google Cloud, оно не сможет использовать управляемое удостоверение из Azure Active Directory (AAD) для аутентификации. Управляемые удостоверения специфичны для Azure и используются для аутентификации в службах Azure.

GLP 21.01.2023 01:06

Другие вопросы по теме