Недавно мы развернули бота в 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. Может ли кто-нибудь помочь, что мне не хватает?
Спасибо
Вы можете использовать библиотеку 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
)
Хм... У меня нет AzureActiveDirectoryAuthentication в botframework.connector.auth?
вы можете использовать ManagedIdentityCredential из azure.identity
Спасибо. Я установил azure-identity == 1.5.0, так как в последней версии я получил ошибку. Но я все еще получаю сообщение об ошибке при отправке адаптивной карты боту: Исключение произошло при отправке упреждающего сообщения: объект «ManagedIdentityCredential» не имеет атрибута «signed_session»
На самом деле ошибка заключается в том, что аутентификация ManagedIdentityCredential недоступна, конечная точка управляемого удостоверения не найдена. Нужно ли мне что-либо настраивать на портале Azure?
@GLP Я бы сделал это с помощью библиотеки запросов. Он работает как с управляемой идентификацией, так и с многопользовательскими ботами.
Я отметил это как ответ, потому что в определенном контексте это правильный ответ. Это из chatGPT. Если ваше приложение Python размещено в Google Cloud, оно не сможет использовать управляемое удостоверение из Azure Active Directory (AAD) для аутентификации. Управляемые удостоверения специфичны для Azure и используются для аутентификации в службах Azure.
Спасибо за быстрый ответ. Знаете ли вы, есть ли способ добиться этого с помощью botframework-connector. Потому что у нас есть старые боты, созданные без типа (управляемая идентификация, назначенная пользователем), для которых у нас есть пароли, и приведенный выше код работает хорошо.