fixed teamsbot issues
This commit is contained in:
parent
75e07743a6
commit
03a6d3248b
13 changed files with 83 additions and 59 deletions
|
|
@ -32,18 +32,18 @@ APP_LOGGING_ROTATION_SIZE = 10485760
|
||||||
APP_LOGGING_BACKUP_COUNT = 5
|
APP_LOGGING_BACKUP_COUNT = 5
|
||||||
|
|
||||||
# OAuth: Auth app (login/JWT) vs Data app (Microsoft Graph / Google APIs). Same IDs until you split apps in Azure / GCP.
|
# OAuth: Auth app (login/JWT) vs Data app (Microsoft Graph / Google APIs). Same IDs until you split apps in Azure / GCP.
|
||||||
Service_MSFT_AUTH_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_AUTH_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_AUTH_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQm83T29rV1pQelMtc1p1MXR4NTFpa19CTEhHQ0xfNmdPUmZqcWp5UHBMS0hYTGl4c1pPdmhTNTJVWUl5WnlnUUZhV0VTRzVCb0d5YjR1NnZPZk5CZ0dGazNGdUJVbjkxeVdrYlNiVjJUYzF2aVFtQnVxTHFqTTJqZlF0RTFGNmE1OGN1TEk=
|
Service_MSFT_AUTH_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQnFBa1kxaG9WY1FJaWdCbVFVaTllUlJfU3Y3MmJkRmkzMDVDWUNtZEhlNVhISzJPcy00ZUVZcklYLXFMV0dIODV3NXNSSFBKQ0ZsZllES3diTEgySDF0T1ZCbFZHREZtcXFGSWNZN1NJbzJzczRRQWxoeVNsNzlsa0VzMHJPWHUydjBBclo=
|
||||||
Service_MSFT_AUTH_REDIRECT_URI = http://localhost:8000/api/msft/auth/login/callback
|
Service_MSFT_AUTH_REDIRECT_URI = http://localhost:8000/api/msft/auth/login/callback
|
||||||
Service_MSFT_DATA_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_DATA_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_DATA_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQm83T29rV1pQelMtc1p1MXR4NTFpa19CTEhHQ0xfNmdPUmZqcWp5UHBMS0hYTGl4c1pPdmhTNTJVWUl5WnlnUUZhV0VTRzVCb0d5YjR1NnZPZk5CZ0dGazNGdUJVbjkxeVdrYlNiVjJUYzF2aVFtQnVxTHFqTTJqZlF0RTFGNmE1OGN1TEk=
|
Service_MSFT_DATA_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQnFBa1kyUW96aXFVOVJlLUdyRlVvT1hVU09ILWtMZnV2M19mVUxGMnFPV3FzNTdQa3dTbHVGTDBHTk01ZThLcjh6QUR5VldVZUpfcDlZNTh5YldtLWtjTll6VzJNQ3JCQ3ZubHdmd2JvaExDOXdvQ1pjWDVQTUtFWVAtUHhwS1lFQnJXWk4=
|
||||||
Service_MSFT_DATA_REDIRECT_URI = http://localhost:8000/api/msft/auth/connect/callback
|
Service_MSFT_DATA_REDIRECT_URI = http://localhost:8000/api/msft/auth/connect/callback
|
||||||
|
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_AUTH_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQnFBa1kyd1hPd09vcVFtbVg0Sm5Nd1VYVEEtWjZMZkFndmFVS0ZlcTU0dzJnYVYzRkZWbjh0QldyZkhseDV2cUgxYkNHTzF6MXhqQlZ2N0UtbmhPeWRKUHBVdzV0Q1ROaWNuN2xjMmVzMjNZQ2ZYZ3dOTHgxaU5sTGRjVHpfakhYeWF0ZGU=
|
||||||
Service_GOOGLE_AUTH_REDIRECT_URI = http://localhost:8000/api/google/auth/login/callback
|
Service_GOOGLE_AUTH_REDIRECT_URI = http://localhost:8000/api/google/auth/login/callback
|
||||||
Service_GOOGLE_DATA_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_DATA_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_DATA_CLIENT_SECRET = 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
|
Service_GOOGLE_DATA_CLIENT_SECRET = DEV_ENC:Z0FBQUFBQnFBa1kySXoyd1BmTnhOd1owTUJOWm53WlZMMjFHNGJhSUwyd2NDUW9BanlRWVJPLU5jYzRlcm5QeW96d0JYUkVWVWd2dGNBVEpJbElZY2lWb0o5S0gyNnhoV1pnNXhpSFEyaklZZjcwX2lVU0ktMEJGN01DMDhXQ3k4R1BXc1Q3ejFjOEg=
|
||||||
Service_GOOGLE_DATA_REDIRECT_URI = http://localhost:8000/api/google/auth/connect/callback
|
Service_GOOGLE_DATA_REDIRECT_URI = http://localhost:8000/api/google/auth/connect/callback
|
||||||
|
|
||||||
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
||||||
|
|
|
||||||
|
|
@ -34,18 +34,18 @@ APP_LOGGING_ROTATION_SIZE = 10485760
|
||||||
APP_LOGGING_BACKUP_COUNT = 5
|
APP_LOGGING_BACKUP_COUNT = 5
|
||||||
|
|
||||||
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
||||||
Service_MSFT_AUTH_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_AUTH_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_AUTH_CLIENT_SECRET = INT_ENC:Z0FBQUFBQm83T29rMDZvcV9qTG5xb1FzUkdqS1llbzRxSEJXbmpONFFtcUtfZXdtZjQybmJSMjBjMEpnRVhiOGRuczZvVFBFdVVTQV80SG9PSnRQTEpLdVViNm5wc2E5aGRLWjZ4TGF1QjVkNmdRSzBpNWNkYXVublFYclVEdEM5TVBBZWVVMW5RVWk=
|
Service_MSFT_AUTH_CLIENT_SECRET = INT_ENC:Z0FBQUFBQnFBa1kydlVubld1d1h6SUNSWW1aZ3p4X3Zod1NDTjhZVnVYS2lqOERGTFp2OXJ4TGRiNlRLVFpzLUVDTUhkZGhGUWdxa1djdEV5UWkyblN1UHZoaFBjaExNTEpGMG1PRGJEbDdHVll0Ungwcl9JemZ4ZXFzZUNFQmFlZi1DZFlCekU1S3E=
|
||||||
Service_MSFT_AUTH_REDIRECT_URI = https://gateway-int.poweron.swiss/api/msft/auth/login/callback
|
Service_MSFT_AUTH_REDIRECT_URI = https://gateway-int.poweron.swiss/api/msft/auth/login/callback
|
||||||
Service_MSFT_DATA_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_DATA_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_DATA_CLIENT_SECRET = INT_ENC:Z0FBQUFBQm83T29rMDZvcV9qTG5xb1FzUkdqS1llbzRxSEJXbmpONFFtcUtfZXdtZjQybmJSMjBjMEpnRVhiOGRuczZvVFBFdVVTQV80SG9PSnRQTEpLdVViNm5wc2E5aGRLWjZ4TGF1QjVkNmdRSzBpNWNkYXVublFYclVEdEM5TVBBZWVVMW5RVWk=
|
Service_MSFT_DATA_CLIENT_SECRET = INT_ENC:Z0FBQUFBQnFBa1kyS1hWZXEzUzZTTE5MUlJncVowMU95Y0hmV1hveDBZOWdLU1RIUWt3SGlXNGxVTXVKc2QyQmtmWTlJRU43ZnRDdnlDTGxQY0hTU25CWWFFdDhUem9HU0VYcTFJTVFEbVk0dUhmVzJNVlEzNTNWdjdmaW9WeUVDVW5PRmNFZEQzNTY=
|
||||||
Service_MSFT_DATA_REDIRECT_URI = https://gateway-int.poweron.swiss/api/msft/auth/connect/callback
|
Service_MSFT_DATA_REDIRECT_URI = https://gateway-int.poweron.swiss/api/msft/auth/connect/callback
|
||||||
|
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_AUTH_CLIENT_SECRET = INT_ENC:Z0FBQUFBQnFBa1kyUTUwNXNGaHRNaGxxbF9sdWJ3Q0xLYU5yOHB4Yk8zMDZvQ29yaEhWOE5JMENXRk5jb2ZBdzRKQ2ZTTld6ZlIxemhOYzN1VE10TjBDRWZEMXlLVWRNYjZ0VG5RZ3I3NWt0SEJzMzdsUmRzcVNmbktRNHZqTUF6a2EyUkVUSFJnZFE=
|
||||||
Service_GOOGLE_AUTH_REDIRECT_URI = https://gateway-int.poweron.swiss/api/google/auth/login/callback
|
Service_GOOGLE_AUTH_REDIRECT_URI = https://gateway-int.poweron.swiss/api/google/auth/login/callback
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_DATA_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_DATA_CLIENT_SECRET = INT_ENC:Z0FBQUFBQnFBa1kyV1FRVjF0c0d3d0dyWU1TdW9HdXVkdHdsVWZKYTJjbGZPRDhMRjA2M0FkaUZIVmhIUmFKNjg2ekFodHd6NG80VTI3TC1icW1LZ01jWVZuQ1pKRm5nMW5UREJEaGp2Wl9oRDRCSmZVT0JpTnkwXzgwY0pkV29yczQ5akF2d1ZGcVY=
|
||||||
Service_GOOGLE_DATA_REDIRECT_URI = https://gateway-int.poweron.swiss/api/google/auth/connect/callback
|
Service_GOOGLE_DATA_REDIRECT_URI = https://gateway-int.poweron.swiss/api/google/auth/connect/callback
|
||||||
|
|
||||||
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
||||||
|
|
|
||||||
|
|
@ -32,18 +32,18 @@ APP_LOGGING_ROTATION_SIZE = 10485760
|
||||||
APP_LOGGING_BACKUP_COUNT = 5
|
APP_LOGGING_BACKUP_COUNT = 5
|
||||||
|
|
||||||
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
||||||
Service_MSFT_AUTH_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_AUTH_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnBESkk2T25scFU1T1pNd2FENTFRM3kzcEpSXy1HT0trQkR2Wnl3U3RYbExzRy1YUTkxd3lPZE84U2lhX3FZanp5TjhYRGluLXVjU3hjaWRBUnZLbVhtRDItZ3FxNXJ3MUxicUZTXzJWZVNrR0VKN3ZlNEtET1ppOFk0MzNmbkwyRmROUk4=
|
Service_MSFT_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kyeUZORDYxOFdlNHk1N25kV3pSQVJMUVFwLUFlMzlzQjQ1eVljOTlzX184RndsTmtTV1FjdWkyQlBiUkdCbGt5S2ltZjJxa2I2dHBMdnJqZnhFSnBCampHYjB3RG5URDM1YzZSLVd6TGdaRXRVcEdadE5zM2thNV9SZy1KZDdLSHY=
|
||||||
Service_MSFT_AUTH_REDIRECT_URI=https://api.poweron.swiss/api/msft/auth/login/callback
|
Service_MSFT_AUTH_REDIRECT_URI=https://api.poweron.swiss/api/msft/auth/login/callback
|
||||||
Service_MSFT_DATA_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_DATA_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnBESkk2T25scFU1T1pNd2FENTFRM3kzcEpSXy1HT0trQkR2Wnl3U3RYbExzRy1YUTkxd3lPZE84U2lhX3FZanp5TjhYRGluLXVjU3hjaWRBUnZLbVhtRDItZ3FxNXJ3MUxicUZTXzJWZVNrR0VKN3ZlNEtET1ppOFk0MzNmbkwyRmROUk4=
|
Service_MSFT_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kySk5uMmlWczBWTE00MHBIcWlBbVJmVmc3MlBWbDA1YTFaS3psZjVLd3d1X2FvRHV0X0c5blpLV0FpY05aMTJMMzUtcG8wakF2TlM3SGQ2VjFZM3JLT1MwTlZ0bm9BRlpkbHVPQTFNaXJvazlQRzN4M2ZZNEVhV1JHV190dWluSUk=
|
||||||
Service_MSFT_DATA_REDIRECT_URI = https://api.poweron.swiss/api/msft/auth/connect/callback
|
Service_MSFT_DATA_REDIRECT_URI = https://api.poweron.swiss/api/msft/auth/connect/callback
|
||||||
|
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kybjVVZ0FldUE1NTJiY2U1N0I0aVU0Z2hfeWlYc2tTdmlxTS1NdGxsRnFHdjZVcW5RRHZkUFhzUTVyX2RaZHlrQThRdTdCRmVBelBOcDlsbFQyd19SZExuWEM5aTcwQ0FvY3ctMUlWU1pndDE0MkdzeTZZRHkwLWU3aW56LW1jS20=
|
||||||
Service_GOOGLE_AUTH_REDIRECT_URI =
|
Service_GOOGLE_AUTH_REDIRECT_URI =
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_DATA_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kyMnFma3VPOVJtTFFrNDRLN0NkWHY2dUZDWlJzdDVMd3p3N19IY0tWdURRRzExOGZCMjJOYmpKT1E0cTVwYlgtcVJINTY0anZPc1VoTW00cHl6NVh3ZHVTek1oT1RqWUhtamRkZ1dENWlwNTlZSU1oNWczeGdEOC1Gbk5XU2RBcmI=
|
||||||
Service_GOOGLE_DATA_REDIRECT_URI =
|
Service_GOOGLE_DATA_REDIRECT_URI =
|
||||||
|
|
||||||
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
||||||
|
|
|
||||||
|
|
@ -33,18 +33,18 @@ APP_LOGGING_ROTATION_SIZE = 10485760
|
||||||
APP_LOGGING_BACKUP_COUNT = 5
|
APP_LOGGING_BACKUP_COUNT = 5
|
||||||
|
|
||||||
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
# OAuth: Auth app (login/JWT) vs Data app (Graph / Google APIs)
|
||||||
Service_MSFT_AUTH_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_AUTH_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnBESkk2T25scFU1T1pNd2FENTFRM3kzcEpSXy1HT0trQkR2Wnl3U3RYbExzRy1YUTkxd3lPZE84U2lhX3FZanp5TjhYRGluLXVjU3hjaWRBUnZLbVhtRDItZ3FxNXJ3MUxicUZTXzJWZVNrR0VKN3ZlNEtET1ppOFk0MzNmbkwyRmROUk4=
|
Service_MSFT_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kySFR2NjBKM084QTNpeUlyUmM4R0N0SU1BZ2x4MmVTZTVHQkVzRE9GdmFkV041MzhudFhobjU0RWNnd3lqeXpKUXA5aGtNZkhtYU12QjBtX0NjemVmdEZBdC1TbXVBSXJTcF9vMlJXd0ZNRTRKRFBMUXNjTF85eTBxakR4RVNfYmU=
|
||||||
Service_MSFT_AUTH_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/msft/auth/login/callback
|
Service_MSFT_AUTH_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/msft/auth/login/callback
|
||||||
Service_MSFT_DATA_CLIENT_ID = c7e7112d-61dc-4f3a-8cd3-08cc4cd7504c
|
Service_MSFT_DATA_CLIENT_ID = 840b759a-4d79-4a7a-9598-f3ed204d99d8
|
||||||
Service_MSFT_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnBESkk2T25scFU1T1pNd2FENTFRM3kzcEpSXy1HT0trQkR2Wnl3U3RYbExzRy1YUTkxd3lPZE84U2lhX3FZanp5TjhYRGluLXVjU3hjaWRBUnZLbVhtRDItZ3FxNXJ3MUxicUZTXzJWZVNrR0VKN3ZlNEtET1ppOFk0MzNmbkwyRmROUk4=
|
Service_MSFT_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kyNVU4cVRIZFdjS3l2S1RJVTVlc1ozQ1liZXZDX1VwdFZQUzFtS0N6UWYyeGxkNGNmY1hoaWxEUDBXVU5QR2t3Vi1ZV1A2QkxqbnpobzJwOXdzYTBZaFZYdnNkeDE1VVl0bm4weHFiLXdON2gtZzAwMTkxNWRoZldFM2djSkNHVS0=
|
||||||
Service_MSFT_DATA_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/msft/auth/connect/callback
|
Service_MSFT_DATA_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/msft/auth/connect/callback
|
||||||
|
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_AUTH_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kyUmJleVpTOF9OaFV3NGVfcWVBX2oxSjUwMWRGOFZRWFRIN1FZRzZ6U3VQMlg5a21RY1drTHh3U254LW4zM1A1cXQ1TTFWYlNoek9hSHJIeE4tbm1wU1lKRXlKNU5HVWI4VGZwTVE0VnJGaV8wZmNvdkVrMjJGeXdmZ3UyNmVXN1E=
|
||||||
Service_GOOGLE_AUTH_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/google/auth/login/callback
|
Service_GOOGLE_AUTH_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/google/auth/login/callback
|
||||||
Service_GOOGLE_AUTH_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
Service_GOOGLE_DATA_CLIENT_ID = 813678306829-3f23dnf1cs4aaftubjfickt46tlmkgjm.apps.googleusercontent.com
|
||||||
Service_GOOGLE_AUTH_CLIENT_SECRET = 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
|
Service_GOOGLE_DATA_CLIENT_SECRET = PROD_ENC:Z0FBQUFBQnFBa1kyY2pxMDh0U0RqWERianBMTTNtSUZPSzhKUzh4S0RTenR2MmxnRDlvQzJjbDVTczRWLUJtVnhxWTE2MmUxQjJia2xJcVUzVlFlUnpma040NFdHRzVNRUt0OXR0c2JkTkRmQ1RIYllXbXFFaExIQWNycFVHbUxHbmtYOVhOVUV2MFY=
|
||||||
Service_GOOGLE_DATA_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/google/auth/connect/callback
|
Service_GOOGLE_DATA_REDIRECT_URI = https://gateway-prod.poweron.swiss/api/google/auth/connect/callback
|
||||||
|
|
||||||
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
# ClickUp OAuth (Verbindungen / automation). Create an app in ClickUp: Settings → Apps → API; set redirect URL to Service_CLICKUP_OAUTH_REDIRECT_URI exactly.
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,10 @@ _EPHEMERAL_PHRASE_INTENTS: Dict[str, str] = {
|
||||||
),
|
),
|
||||||
"agentRound": (
|
"agentRound": (
|
||||||
"One short sentence (max ~14 words) the assistant says BETWEEN rounds "
|
"One short sentence (max ~14 words) the assistant says BETWEEN rounds "
|
||||||
"of a longer agent task to signal that work is still in progress. "
|
"of a longer agent task to update the audience on what it is doing. "
|
||||||
"Include the placeholder tokens '{round}' and '{maxRounds}' so the "
|
"Include the placeholder token '{activity}' which will be filled with "
|
||||||
"caller can substitute the actual numbers — e.g. 'Step {round} of "
|
"the current activity — e.g. 'I am {activity}, one moment...' or "
|
||||||
"{maxRounds}, still working.'"
|
"'Currently {activity}, almost there...'. Do NOT include step numbers."
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1253,19 +1253,18 @@ class TeamsbotService:
|
||||||
|
|
||||||
def _registerSpeakerHint(self, speaker: str, text: str, sessionId: str = ""):
|
def _registerSpeakerHint(self, speaker: str, text: str, sessionId: str = ""):
|
||||||
"""Track current speaker from captions for STT attribution.
|
"""Track current speaker from captions for STT attribution.
|
||||||
When the first non-bot caption arrives, retroactively attributes
|
Retroactively attributes any unattributed STT segments whenever a
|
||||||
any STT segments that were created before a speaker was known."""
|
new non-bot caption speaker arrives (not just the first time)."""
|
||||||
if not speaker:
|
if not speaker:
|
||||||
return
|
return
|
||||||
normalizedSpeaker = speaker.strip()
|
normalizedSpeaker = speaker.strip()
|
||||||
if not normalizedSpeaker or self._isBotSpeaker(normalizedSpeaker):
|
if not normalizedSpeaker or self._isBotSpeaker(normalizedSpeaker):
|
||||||
return
|
return
|
||||||
|
|
||||||
prevSpeaker = self._lastCaptionSpeaker
|
|
||||||
self._lastCaptionSpeaker = normalizedSpeaker
|
self._lastCaptionSpeaker = normalizedSpeaker
|
||||||
self._knownSpeakers.add(normalizedSpeaker)
|
self._knownSpeakers.add(normalizedSpeaker)
|
||||||
|
|
||||||
if prevSpeaker is None and self._unattributedTranscriptIds:
|
if self._unattributedTranscriptIds:
|
||||||
from . import interfaceFeatureTeamsbot as interfaceDb
|
from . import interfaceFeatureTeamsbot as interfaceDb
|
||||||
interface = interfaceDb.getInterface(self.currentUser, self.mandateId, self.instanceId)
|
interface = interfaceDb.getInterface(self.currentUser, self.mandateId, self.instanceId)
|
||||||
for tid in self._unattributedTranscriptIds:
|
for tid in self._unattributedTranscriptIds:
|
||||||
|
|
@ -3244,15 +3243,17 @@ class TeamsbotService:
|
||||||
return await self._pickEphemeralPhrase("agentBusy")
|
return await self._pickEphemeralPhrase("agentBusy")
|
||||||
|
|
||||||
async def _interimAgentRoundMessage(
|
async def _interimAgentRoundMessage(
|
||||||
self, roundNum: int, maxRounds: int
|
self, lastToolLabel: Optional[str] = None
|
||||||
) -> Optional[str]:
|
) -> Optional[str]:
|
||||||
"""Per-round progress notice for long agent runs (meeting voice /
|
"""Per-round progress notice for long agent runs (meeting voice /
|
||||||
chat, ephemeral). Phrasing is AI-localised once per session;
|
chat, ephemeral). Phrasing is AI-localised once per session;
|
||||||
``{round}`` and ``{maxRounds}`` placeholders are substituted at
|
``{activity}`` placeholder is substituted with the tool's
|
||||||
render time. Returns ``None`` if generation failed."""
|
``displayLabel`` from the ToolDefinition. Returns ``None`` if
|
||||||
|
generation failed."""
|
||||||
|
activity = lastToolLabel or "processing your request"
|
||||||
return await self._pickEphemeralPhrase(
|
return await self._pickEphemeralPhrase(
|
||||||
"agentRound",
|
"agentRound",
|
||||||
substitutions={"round": roundNum, "maxRounds": maxRounds},
|
substitutions={"activity": activity},
|
||||||
)
|
)
|
||||||
|
|
||||||
async def _notifyMeetingEphemeral(self, sessionId: str, text: str) -> None:
|
async def _notifyMeetingEphemeral(self, sessionId: str, text: str) -> None:
|
||||||
|
|
@ -3371,6 +3372,7 @@ class TeamsbotService:
|
||||||
|
|
||||||
finalText: str = ""
|
finalText: str = ""
|
||||||
rounds = 0
|
rounds = 0
|
||||||
|
lastToolLabel: Optional[str] = None
|
||||||
try:
|
try:
|
||||||
async for event in agentService.runAgent(
|
async for event in agentService.runAgent(
|
||||||
prompt=taskText,
|
prompt=taskText,
|
||||||
|
|
@ -3391,11 +3393,9 @@ class TeamsbotService:
|
||||||
"round": roundNum,
|
"round": roundNum,
|
||||||
"maxRounds": maxR,
|
"maxRounds": maxR,
|
||||||
})
|
})
|
||||||
# Runde 1: schon allgemeiner Start-Hinweis; ab Runde 2 ins Meeting melden.
|
|
||||||
# Director prompts bleiben still — keine Zwischen-Updates ins Meeting.
|
|
||||||
if roundNum >= 2 and not directorPromptMode:
|
if roundNum >= 2 and not directorPromptMode:
|
||||||
try:
|
try:
|
||||||
roundText = await self._interimAgentRoundMessage(roundNum, maxR)
|
roundText = await self._interimAgentRoundMessage(lastToolLabel)
|
||||||
if roundText:
|
if roundText:
|
||||||
await self._notifyMeetingEphemeral(sessionId, roundText)
|
await self._notifyMeetingEphemeral(sessionId, roundText)
|
||||||
except Exception as roundNoticeErr:
|
except Exception as roundNoticeErr:
|
||||||
|
|
@ -3403,7 +3403,9 @@ class TeamsbotService:
|
||||||
f"Session {sessionId}: Per-round agent notice failed: {roundNoticeErr}"
|
f"Session {sessionId}: Per-round agent notice failed: {roundNoticeErr}"
|
||||||
)
|
)
|
||||||
elif event.type == AgentEventTypeEnum.TOOL_CALL:
|
elif event.type == AgentEventTypeEnum.TOOL_CALL:
|
||||||
toolName = (event.data or {}).get("toolName") if event.data else None
|
evtData = event.data or {}
|
||||||
|
toolName = evtData.get("toolName")
|
||||||
|
lastToolLabel = evtData.get("displayLabel")
|
||||||
await _emitSessionEvent(sessionId, "agentRun", {
|
await _emitSessionEvent(sessionId, "agentRun", {
|
||||||
"source": sourceLabel,
|
"source": sourceLabel,
|
||||||
"promptId": promptId,
|
"promptId": promptId,
|
||||||
|
|
|
||||||
|
|
@ -335,9 +335,14 @@ async def runAgentLoop(
|
||||||
|
|
||||||
# Execute tool calls
|
# Execute tool calls
|
||||||
for tc in toolCalls:
|
for tc in toolCalls:
|
||||||
|
toolDef = toolRegistry.getTool(tc.name)
|
||||||
yield AgentEvent(
|
yield AgentEvent(
|
||||||
type=AgentEventTypeEnum.TOOL_CALL,
|
type=AgentEventTypeEnum.TOOL_CALL,
|
||||||
data={"toolName": tc.name, "args": tc.args}
|
data={
|
||||||
|
"toolName": tc.name,
|
||||||
|
"displayLabel": toolDef.displayLabel if toolDef else None,
|
||||||
|
"args": tc.args,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
results = await _executeToolCalls(toolCalls, toolRegistry, {
|
results = await _executeToolCalls(toolCalls, toolRegistry, {
|
||||||
|
|
|
||||||
|
|
@ -184,4 +184,5 @@ def _registerConnectionTools(registry: ToolRegistry, services):
|
||||||
"required": ["connectionId", "to", "subject", "body"],
|
"required": ["connectionId", "to", "subject", "body"],
|
||||||
},
|
},
|
||||||
readOnly=False,
|
readOnly=False,
|
||||||
|
displayLabel="composing an email",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -297,6 +297,7 @@ def _registerMediaTools(registry: ToolRegistry, services):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
readOnly=False,
|
readOnly=False,
|
||||||
|
displayLabel="creating a document",
|
||||||
)
|
)
|
||||||
|
|
||||||
# ── textToSpeech tool ──────────────────────────────────────────────
|
# ── textToSpeech tool ──────────────────────────────────────────────
|
||||||
|
|
@ -573,6 +574,7 @@ def _registerMediaTools(registry: ToolRegistry, services):
|
||||||
"required": ["prompt"],
|
"required": ["prompt"],
|
||||||
},
|
},
|
||||||
readOnly=False,
|
readOnly=False,
|
||||||
|
displayLabel="generating an image",
|
||||||
)
|
)
|
||||||
|
|
||||||
# ── createChart tool ─────────────────────────────────────────────────
|
# ── createChart tool ─────────────────────────────────────────────────
|
||||||
|
|
@ -770,6 +772,7 @@ def _registerMediaTools(registry: ToolRegistry, services):
|
||||||
"required": ["datasets"],
|
"required": ["datasets"],
|
||||||
},
|
},
|
||||||
readOnly=False,
|
readOnly=False,
|
||||||
|
displayLabel="creating a chart",
|
||||||
)
|
)
|
||||||
|
|
||||||
# ── Phase 3: speechToText, detectLanguage, neutralizeData, executeCode ──
|
# ── Phase 3: speechToText, detectLanguage, neutralizeData, executeCode ──
|
||||||
|
|
@ -917,5 +920,6 @@ def _registerMediaTools(registry: ToolRegistry, services):
|
||||||
},
|
},
|
||||||
"required": ["code"]
|
"required": ["code"]
|
||||||
},
|
},
|
||||||
readOnly=True
|
readOnly=True,
|
||||||
|
displayLabel="running calculations",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -359,7 +359,8 @@ def _registerWorkspaceTools(registry: ToolRegistry, services):
|
||||||
},
|
},
|
||||||
"required": ["fileId"]
|
"required": ["fileId"]
|
||||||
},
|
},
|
||||||
readOnly=True
|
readOnly=True,
|
||||||
|
displayLabel="reviewing a document",
|
||||||
)
|
)
|
||||||
|
|
||||||
registry.register(
|
registry.register(
|
||||||
|
|
@ -406,7 +407,8 @@ def _registerWorkspaceTools(registry: ToolRegistry, services):
|
||||||
"properties": {"query": {"type": "string", "description": "Search query"}},
|
"properties": {"query": {"type": "string", "description": "Search query"}},
|
||||||
"required": ["query"]
|
"required": ["query"]
|
||||||
},
|
},
|
||||||
readOnly=True
|
readOnly=True,
|
||||||
|
displayLabel="researching on the web",
|
||||||
)
|
)
|
||||||
|
|
||||||
registry.register(
|
registry.register(
|
||||||
|
|
@ -581,7 +583,8 @@ def _registerWorkspaceTools(registry: ToolRegistry, services):
|
||||||
},
|
},
|
||||||
"required": ["url"]
|
"required": ["url"]
|
||||||
},
|
},
|
||||||
readOnly=True
|
readOnly=True,
|
||||||
|
displayLabel="reading a webpage",
|
||||||
)
|
)
|
||||||
|
|
||||||
registry.register(
|
registry.register(
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,12 @@ class ToolDefinition(BaseModel):
|
||||||
"""Schema for a tool available to the agent."""
|
"""Schema for a tool available to the agent."""
|
||||||
name: str = Field(description="Unique tool name")
|
name: str = Field(description="Unique tool name")
|
||||||
description: str = Field(description="What this tool does")
|
description: str = Field(description="What this tool does")
|
||||||
|
displayLabel: Optional[str] = Field(
|
||||||
|
default=None,
|
||||||
|
description="Short human-readable activity phrase (e.g. 'researching on the web'). "
|
||||||
|
"Used for live progress messages in meetings. English gerund phrase; "
|
||||||
|
"localised by the caller."
|
||||||
|
)
|
||||||
parameters: Dict[str, Any] = Field(
|
parameters: Dict[str, Any] = Field(
|
||||||
default_factory=dict,
|
default_factory=dict,
|
||||||
description="JSON Schema for tool parameters"
|
description="JSON Schema for tool parameters"
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ class ToolRegistry:
|
||||||
def register(self, name: str, handler: Callable[..., Awaitable[ToolResult]],
|
def register(self, name: str, handler: Callable[..., Awaitable[ToolResult]],
|
||||||
description: str = "", parameters: Dict[str, Any] = None,
|
description: str = "", parameters: Dict[str, Any] = None,
|
||||||
readOnly: bool = False, featureType: str = None,
|
readOnly: bool = False, featureType: str = None,
|
||||||
toolSet: str = None):
|
toolSet: str = None, displayLabel: str = None):
|
||||||
"""Register a tool with its handler function."""
|
"""Register a tool with its handler function."""
|
||||||
if name in self._tools:
|
if name in self._tools:
|
||||||
logger.warning(f"Tool '{name}' already registered, overwriting")
|
logger.warning(f"Tool '{name}' already registered, overwriting")
|
||||||
|
|
@ -31,6 +31,7 @@ class ToolRegistry:
|
||||||
self._tools[name] = ToolDefinition(
|
self._tools[name] = ToolDefinition(
|
||||||
name=name,
|
name=name,
|
||||||
description=description,
|
description=description,
|
||||||
|
displayLabel=displayLabel,
|
||||||
parameters=parameters or {},
|
parameters=parameters or {},
|
||||||
readOnly=readOnly,
|
readOnly=readOnly,
|
||||||
featureType=featureType,
|
featureType=featureType,
|
||||||
|
|
|
||||||
|
|
@ -567,11 +567,14 @@ mit Web-Recherche, E-Mail-Versand, Dokumenten-Erzeugung und Datenquellen-Zugriff
|
||||||
|
|
||||||
Setze "needsAgent": true und "agentReason": "<kurze Beschreibung der Aufgabe in einem Satz>"
|
Setze "needsAgent": true und "agentReason": "<kurze Beschreibung der Aufgabe in einem Satz>"
|
||||||
WENN die Aufgabe eines oder mehrere dieser Merkmale hat:
|
WENN die Aufgabe eines oder mehrere dieser Merkmale hat:
|
||||||
- Recherche im Internet noetig (z.B. "recherchier was im Internet ueber XY", "schau mal nach", "google das")
|
- Recherche im Internet oder aktuelle Informationen noetig
|
||||||
- E-Mail an Teilnehmer/Kontakte versenden
|
- Informationen beschaffen die du NICHT im Transkript oder in deinem Vorwissen hast
|
||||||
- Dokument (PDF, Word, Excel) generieren oder im SharePoint/Drive ablegen
|
- E-Mail versenden
|
||||||
- Mehrere Schritte oder Tool-Aufrufe noetig (Zusammenfassung + Versand, Recherche + Empfehlung etc.)
|
- Dokument generieren oder in einer Datenquelle ablegen
|
||||||
- Daten aus externen Quellen abrufen (Outlook-Kontakte, SharePoint-Dateien, Kalender etc.)
|
- Mehrere Schritte oder Tool-Aufrufe noetig
|
||||||
|
- Daten aus externen Quellen abrufen
|
||||||
|
|
||||||
|
Wenn du den gewuenschten Inhalt nicht selbst liefern kannst, setze needsAgent=true.
|
||||||
|
|
||||||
Wenn needsAgent=true:
|
Wenn needsAgent=true:
|
||||||
- Setze shouldRespond=false (der Agent uebernimmt; du sprichst NICHT eigenstaendig).
|
- Setze shouldRespond=false (der Agent uebernimmt; du sprichst NICHT eigenstaendig).
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,8 @@ class WebService:
|
||||||
searchUrls = []
|
searchUrls = []
|
||||||
searchResultsWithContent = []
|
searchResultsWithContent = []
|
||||||
if needsSearch and (not allUrls or len(allUrls) < maxNumberPages):
|
if needsSearch and (not allUrls or len(allUrls) < maxNumberPages):
|
||||||
self._get_service("chat").progressLogUpdate(operationId, 0.3, "Searching for URLs and content")
|
if operationId:
|
||||||
|
self._get_service("chat").progressLogUpdate(operationId, 0.3, "Searching for URLs and content")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
searchUrls, searchResultsWithContent = await self._performWebSearch(
|
searchUrls, searchResultsWithContent = await self._performWebSearch(
|
||||||
|
|
@ -113,16 +114,14 @@ class WebService:
|
||||||
searchUrls = []
|
searchUrls = []
|
||||||
searchResultsWithContent = []
|
searchResultsWithContent = []
|
||||||
|
|
||||||
# Prioritize Tavily search URLs over AI-extracted URLs (they're more relevant)
|
|
||||||
if searchUrls:
|
if searchUrls:
|
||||||
# Prepend Tavily URLs to the list (they're more relevant)
|
|
||||||
allUrls = searchUrls + allUrls
|
allUrls = searchUrls + allUrls
|
||||||
logger.info(f"Using {len(searchUrls)} Tavily URLs + {len(allUrls) - len(searchUrls)} other URLs = {len(allUrls)} total")
|
logger.info(f"Using {len(searchUrls)} Tavily URLs + {len(allUrls) - len(searchUrls)} other URLs = {len(allUrls)} total")
|
||||||
else:
|
else:
|
||||||
# If Tavily search failed, use AI-extracted URLs
|
|
||||||
logger.warning("Tavily search returned no URLs, using AI-extracted URLs only")
|
logger.warning("Tavily search returned no URLs, using AI-extracted URLs only")
|
||||||
|
|
||||||
self._get_service("chat").progressLogUpdate(operationId, 0.5, f"Found {len(allUrls)} total URLs")
|
if operationId:
|
||||||
|
self._get_service("chat").progressLogUpdate(operationId, 0.5, f"Found {len(allUrls)} total URLs")
|
||||||
|
|
||||||
# If we have search results (even without content), use them directly instead of crawling
|
# If we have search results (even without content), use them directly instead of crawling
|
||||||
# Tavily search results are more relevant than generic AI-extracted URLs
|
# Tavily search results are more relevant than generic AI-extracted URLs
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue