To use the Garanti BBVA (Sanal POS) payment system in Mavibot, you need to obtain the virtual POS terminal credentials from the bank and enter them in the integration settings. Payment is processed on the bank’s secure page with 3D Secure confirmation.

Obtaining the credentials
Sign an agreement with Garanti BBVA for the Sanal POS (virtual POS) service. When activating the service, ask the bank to enable Ortak Ödeme (shared payment page) for your terminal. Without this feature, payments via the bank’s payment page will not work.
The bank will provide you with:
- Merchant ID (Üye İşyeri No) — your merchant ID;
- Terminal ID — your terminal ID;
- Provision User ID — the provision user name (usually PROVAUT or PROVOOS);
- Provision Password — the provision user password.
The Store Key (3D Secure key) is created by you in the Sanal POS management panel (Yönetim → 3D Secure). Make sure to save it, as it is also required for the integration.
How to connect Garanti BBVA to Mavibot?

In the Acquiring section of Mavibot, select Garanti BBVA and enter the following details:
- Merchant ID — your merchant ID.
- Terminal ID — your terminal ID.
- Provision User ID — the provision user name. If left blank, PROVAUT will be used.
- Provision Password — the provision user password.
- Store Key — your 3D Secure key.
- Store Name — the name displayed to customers on the bank’s payment page. If left blank, "Online store" will be shown.
- Test Mode — enable this option to test the integration using the bank’s test credentials. For processing live payments, this option must be disabled.
The integration is now complete.
Generating a Payment Link
Calculator function:
get_garanti_payment_url(amount, description, currency, customer_email, language)
Parameters:
| Parameter | Description | Required | Default / Allowed Values |
|---|---|---|---|
amount |
Payment amount. | ✅ | — |
description |
Payment description. | No | — |
currency |
Payment currency. | No |
TRY (default). Supported values: TRY, USD, EUR, GBP, JPY
|
customer_email |
Customer's email address. | No | — |
language |
Language of the payment page. | No |
tr (default). Supported values: tr, en
|
The function returns a payment URL.
Payment Link in a Button
To send a button with a payment link, select the Payment button type and choose Garanti BBVA as the payment provider. Then enter the product name, payment amount, and, if necessary, the payment currency.
Example 1: Workflow Configuration
Step 1. Create a Start block.

The Start block is typically used to display the first welcome message in the workflow, along with any introductory information the user needs.
Step 2. Create the block shown below.

Step 3. Go to the Connection settings.

You will need the following regular expression to verify that the customer has entered a valid email address:
^[-\w.]+@([A-z0-9][-A-z0-9]+.)+[A-z]{2,4}$
Also, enable the User enters data option and enter customer_email.
Step 4. Enter the message in the second block.

Step 5. Create a third block and open the Connection settings between the second and third blocks.

Enable the timer to automatically proceed to the next block.
Step 6. In the third block, enter the function in the Calculator.

Example to copy:
amount = 1000
description = "Product1 is a product of great reliability!"
link = get_garanti_payment_url(amount, description, none, customer_email, none)
If you want to accept payments in a currency other than Turkish lira (TRY), specify the currency as shown below.

Example to copy:
amount = 1000
description = "Product1 is a product of great reliability!"
currency = "USD"
link = get_garanti_payment_url(amount, description, currency, customer_email, none)
Example 2. Billing Button
This example is almost identical to Example 1.
However, instead of creating a third block with a function for generating the payment link, you can create a button in the second block.

In the window that opens:
- Enter the button text.
- Select the Billing function.
- Select Garanti BBVA as the payment provider.

Then enter the following:
- Product Name.
- Payment Amount.
- Currency (optional).
- Client Full Name (optional). You can configure this the same way you configured the customer's email input.
-
Customer Email — enter the variable
#{customer_email}.

Then click Add.

Notifications After Payment
After the customer follows the payment link and completes the payment, a notification (callback) will be sent to the conversation.
For a successful payment:
SDJ91MTKTT_success 100

Where:
-
SDJ91MTKTTis the first 10 characters of your Store Key. -
100is the payment amount.
If the payment fails, the following notification will be sent:

SDJ91MTKTT_fail 100
How to Send a Response to a Successful or Failed Payment
Step 1. Create a Trigger block.

Step 2. In the condition field, enter the notification text SDJ91MTKTT_success — without the payment amount — if you want to react to every payment.
In this case, the Match Type should be set to By Keywords.

Alternatively, enter the entire callback text in the Trigger field if you want to react to a specific payment. In this case, the Match Type must be set to Exact Match.

If you want to continue the workflow after a successful payment, you can create a Start block instead of a Trigger block and continue building your bot flow from there.
